Amazon LexとAmazon Kendraを日本語で試せるサンプル(Simple Lex Kendra JP)があったのでやってみる
こんにちは、洲崎です。
Githubのaws-samplesにLexとKendraを日本語で試せるサンプル(Simple Lex Kendra JP)がありましたので、触ってみました。
Simple Lex Kendra JP
Githubに書かれているサンプルシナリオを引用します。
SimpleLexKendra 株式会社という架空の会社のイントラ検索システムを想定しています。/docs ディレクトリにいくつかのドキュメントを配置しています。また、/faq ディレクトリには、FAQ が csv 形式で配置されています。 Amazon Lex v2 のプロジェクトでは、Chatbot 形式で情報システム部に問い合わせを行います。あらかじめよくある問い合わせのフローを定義しておくことで、情報システム部の負担を軽減しています。また、対応方法が不明な問い合わせ (フローとして定義されていない問い合わせ) の場合は、Amazon Kendra を実行して、社内ドキュメントを検索します。 Amazon Kendra のプロジェクトでは、検索フォームから直接社内ドキュメントを検索できます。
すでにサンプルのドキュメントやFAQもあるとのことで、試しやすい内容になっています。
前提条件
このサンプルはCDKを利用する為、Node.jsの実行環境が必要です。
手元の環境が難しいようであればCloud9でも実施可能です。(こちらを参照)
2023/1現在、Amazon Kendraは東京リージョン未対応のため、バージニア北部リージョン(us-east-1)を利用します。
2023/1/30時点の情報です。今後仕様が変わる可能性があります。
デプロイ
GithubのREADME.md
にStep by Stepで丁寧に実装方法が記載されています。
- 前提条件の確認
- AWS CDK のセットアップ
- Amazon Kendra プロジェクトのデプロイ
- Amazon Lex v2 プロジェクトのデプロイ
- Tech Knowledge
基本この流れでやれば環境を作成することができます。
AWS CDK セットアップ
今回はCloud9ではなく自前の環境でやってみました。
Githubのプロジェクトをgit cloneしてディレクトリ配下に移動します。
CDKのBootStrapをus-east-1リージョンでやっていない場合は下記コマンドを実行します。
npx cdk bootstrap aws://${AWS Account ID}/us-east-1
Amazon Kendra
Amazon Kendra デプロイ
下記コマンドを打ちます。
npx cdk deploy SimpleKendraStack
「Do you wish to deploy these changes (y/n)?」と聞かれるのでy
と回答します。
Kendraがデプロイされるまで待ちます。(だいたい40分ほどかかりました)
デプロイが完了するとoutputに以下出力されるのでメモしておきます。
Outputs: SimpleKendraStack.DataSourceBucketName = simplekendrastack-datasourcebucketxxxxxxxx SimpleKendraStack.ExportsOutputFnGetAttKendraIndexArn7ABEB122 = arn:aws:kendra:us-east-1:xxxxxxxx:index/xxxxxxxxxxx SimpleKendraStack.ExportsOutputRefKendraIndex7C32BDCD = xxxxxxxxxxxxxxxxx SimpleKendraStack.FaqBucketName = simplekendrastack-xxxxxxxxxxxxxxxxx SimpleKendraStack.IdentityPoolId = us-east-1:xxxxxxxxxxxxxxxxx SimpleKendraStack.KendraApiEndpointF276F28B = https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/ SimpleKendraStack.KendraIndexId = xxxxxxxxxxxxxxxxx SimpleKendraStack.KendraSampleFrontend = https://xxxxxxxxxxxx.cloudfront.net
Amazon Kendra 設定
デプロイが完了したらマネジメントコンソールにいき、Kendraを開くと、Indexが作成されています。
作成されたsimple-index-by-cdk
をクリックします。
KendraのData sourcesも作成されていますが、EnglishになってるのでJapaneseに変更します。
左メニューからs3-data-source
をクリックします。
LanguageをJapanese(ja)
に変更し、その他は変更せずNextを押していきます。
設定が完了したら、右上のSync now
をクリックして設定完了です。
Outputsで控えたSimpleKendraStack.KendraSampleFrontend
のURLを叩くと、Kendraの検索を利用できます。
試しに「パスワードの更新」と入力すると、答えが表示されました!
QAの情報はAmazon S3のバケットに保存されており、OutputのSimpleKendraStack.FaqBucketName
に保存されています。
QAを追加したい場合はS3バケットのディレクトリに追加し、再度npx cdk deploy SimpleKendraStack
を実行し、S3のDataSourceのSyncを実行します。
ドキュメントのフォーマットは.txt
以外にも.pdf
や.html
も可能とのことです。
(サポートされているフォーマットはこちら)
FAQ追加
Amazon KendraでQA以外に、FAQ(よくある質問)も追加できます。
Kendraのコンソールを開き、左メニューからFAQsをクリックします。
右上のAdd FAQをクリックします。
FAQの名前を入力し、languageはJapanese(ja)
、FAQ file formatは.csv file - Basic
を選択します。
S3はsimplekendrastack-faqbucket
でバケットを参照して中にあるsimple.csv
を選択、IAMロールもSimpleKendraStack-FaqRole
と検索してサジェストされたものを選択します。
S3バケット
あとは右下のAddをクリックして完了です。
FAQを追加した後に、再度Kendraのサンプルサイトにアクセスします。
試しに「Slack ログイン方法」と検索すると、よくある質問(FAQ)から回答を表示することができました。
これでAmazon Kendraの一通りの検証は終了です。他にもデータソースをS3ではなくLambda経由で連携する方法なども記載されていましたので、興味ある方はやってみてください。
Amazon Lex
Amazon Lex デプロイ
Kendraの時と同じような形で、下記コマンドを実行します。
npx cdk deploy SimpleLexV2Stack
KendraのCDKと依存関係がある為、Kendraのプロジェクトがデプロイ済みであることが前提になります。
Lexデプロイは10分ぐらいでした。デプロイが完了したらOutputsをメモしておきます。
Outputs: SimpleLexV2Stack.BotAliasId = xxxxxxxxx SimpleLexV2Stack.BotId = xxxxxxxxx SimpleLexV2Stack.IdentityPoolId = us-east-1:xxxxxxxxxxxxxxxxxxxxxxxxxxx SimpleLexV2Stack.LexV2SampleFrontend = https://xxxxxxxxxxx.cloudfront.net
Amazon Lexの検証
Outputsで出たSimpleLexV2Stack.LexV2SampleFrontend
のURLを叩くとLexのサンプルサイトが表示されます。
右下のヘッドセットボタンを押すことでチャットボットを開始できます。
試しに「PC交換」と打つことで、以下のやり取りを行うことができました。
また、「パスワード更新」と入力すると、Kendraのindexを参照して回答してくれました!
清掃
CDKでデプロイしている為、destroyコマンドで一斉削除が可能です。下記コマンドを実行します。
npx cdk destroy SimpleKendraStack
念の為、CloudFormationのスタックに残ってないか確認します。
最後に
AWSサンプルの「Simple Lex Kendra JP」を利用することで、気軽に日本語のFAQチャットボットを構築することができました。
KendraとLexを日本語で試してみたいという方はぜひ使ってみてはいかがでしょうか。
またLexまで構築できているため、Amazon ConnectやAmazon Connect Chatとも連携がしやすくなってるところも嬉しいポイントです。
ではまた!コンサルティング部の洲崎でした。